package com.wistech.utils;

public class MathUtils {
	private MathUtils() {
	}

	public static double log(double number, double base) {
		return Math.log(number) / Math.log(base);
	}

	/**
	 * 判断一个字符串是否是数字形式
	 * 
	 * @param str
	 *            String 待检测的字符串
	 * @param can_be_decimal
	 *            Boolean 可以是小数，即包含小数点的情况下也返回true
	 * @return boolean
	 */
	public static boolean isNumeric(String str, boolean hasDecimal) {
		boolean flag = true;
		int dotCount = 0; // 检查字符中小数点出现的次数，如果>=2，则不能认定这个字符串要表达是数字

		if (str == null || str.isEmpty()) {
			flag = false;
		} else {
			for (int i = str.length(); --i >= 0;) {
				if (!Character.isDigit(str.charAt(i))) {
					if (hasDecimal) {
						if (str.charAt(i) != '.')
							flag = false;
						else
							++dotCount; // 如果是小数点，计数器加1
					} else {
						flag = false;
					}
				}
			}
		}
		if (dotCount >= 2)
			flag = false;
		return flag;
	}

	public static boolean isNumeric(String str) {
		return str.matches("[\\+-]?[0-9]+((.)[0-9])*[0-9]*");
	}

	public static Long convert2Long(Object value) {
		if (value instanceof Long) {
			return (Long) value;
		} else if (value instanceof Number) {
			return ((Number) value).longValue();
		} else {
			String str = value.toString();
			if (isNumeric(str)) {
				return Long.valueOf(str);
			}
			return null;
		}
	}
}
